import pandas as pd
import requests
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


def value_processing(value):
    """
    处理特殊数据
    """
    substrings_to_remove = [
        "(deprecated)",
        "(不建议使用 5.7.22)",
        "(引入 5.7.22)",
        "(不建议使用 5.7.18)",
        "(引入 5.7.13)",
    ]
    for substring in substrings_to_remove:
        value = value.replace(substring, "")

    # 中文的之间与什么之间转换为英文
    value = value.replace("...之间和...之间", "BETWEEN")
    value = value.replace("之间 ...", "BETWEEN")

    # 去除两端空白字符
    value = value.strip()
    return value


def get_mysql_funcs_list(funcs_save_path="./funcs/mysql_funcs_list.csv"):
    """
    从指定URL提取MySQL函数和运算符的列表，并保存到CSV文件中。
    """
    # MySQL语法的函数和运算符的网页地址
    url = "https://www.docs4dev.com/docs/zh/mysql/5.7/reference/function-reference.html"
    # 发送请求获取网页内容
    response = requests.get(url, verify=False)
    if response.status_code == 200:
        # 解析HTML内容
        soup = BeautifulSoup(response.content, 'html.parser')
        table = soup.find('table')
        df = pd.read_html(str(table))[0]
    else:
        print("网页获取失败，请检测网络或者网页是否存在！")
        return None

    # 处理并保存函数列表
    res = pd.DataFrame()
    funcs = []
    for value in df['Name'].values:
        #  拆分函数名和后面（）
        if ',' in value or '，' in value:
            split_char = ',' if ',' in value else '，'
            for v in value.split(split_char):
                funcs.append(value_processing(v))
        else:
            funcs.append(value_processing(value))

    res['func'] = funcs
    res = res.drop_duplicates(subset='func')
    res.to_csv(funcs_save_path, index=False)

    print("成功提取到MySQL语法的函数和运算符，并写入到文件中：\"{}\"".format(funcs_save_path))


if __name__ == "__main__":
    get_mysql_funcs_list(funcs_save_path="./funcs/mysql_funcs_list.csv")
